AWS再入門ブログリレー Amazon DynamoDB編
こんにちは、コンサル部のリサリサです。
当エントリは弊社コンサルティング部による『AWS 再入門ブログリレー 2020』の 18日目のエントリです。
このブログリレーの企画は、普段 AWS サービスについて最新のネタ・深い/細かいテーマを主に書き連ねてきたメンバーの手によって、 今一度初心に返って、基本的な部分を見つめ直してみよう、解説してみようというコンセプトが含まれています。
AWS をこれから学ぼう!という方にとっては文字通りの入門記事として、またすでに AWS を活用されている方にとっても AWS サービスの再発見や 2020 年のサービスアップデートのキャッチアップの場となればと考えておりますので、ぜひ最後までお付合い頂ければ幸いです。
入門ということで、使い方より特徴的な部分をまとめてみました。1年前のDynamoDBを知らなかった頃の自分に向けて書いてみました!
では、さっそくいってみましょう。18日目のテーマは『Amazon DynamoDB』です。
DynamoDBとは?
フルマネージドなNoSQLのデータベースサービスです。
フルマネージド
インフラの事、何も考えなくても使えます。スケーラビリティ(拡張性)、可用性、バックアップ…。何も考えなくてもAWSが全部してくれます。
引用 : 20180410 AWS White Belt Online Seminar AWSのよくある都市伝説とその真実
NoSQL
RDBでは解決できないスケーラビリティや高速なパフォーマンスなどを解決するために生まれたデータベースです。高いスケーラビリティ(拡張性)の代償に複雑なクエリやトランザクションが苦手です。
- RDB
- 柔軟なクエリ、トランザクションが得意
- スケーラビリティが苦手
- NoSQL
- スケーラビリティが得意
- 柔軟なクエリ、トランザクションが苦手
つまりDynamoDBとは?
インフラの事、難しい事を何も考えなくても使えて、でも勝手にスケーリングできて、高可用性で、勝手にバックアップできて、高速なパフォーマンスを発揮するすごいデータベースです。
構造
NoSQLには
- キーバリューストア(KVS)
- カラム指向データベース
- ドキュメント指向データベース
- グラフ指向データベース
と大きく4つの構造がありますが、DynamoDBは
- キーバリューストア(KVS)
- ドキュメント指向データベース
の二つになれます。※グラフ指向のTITAN DBのバックエンドにもなれたりしますが割愛します。
キーバリューストア(KVS)
キーとバリュー(値)という単純な構造。
引用:【AWS Tech 再演】AWS の NoSQL 入門 〜Amazon ElastiCache, Amazon DynamoDB〜|AWS Summit Tokyo 2017
ドキュメント指向データベース
キーとオブジェクトという構造。JSONやXML等の不定形なデータ構造に対応しており、複雑なデータモデリングを容易に実現可能できます
引用:【AWS Tech 再演】AWS の NoSQL 入門 〜Amazon ElastiCache, Amazon DynamoDB〜|AWS Summit Tokyo 2017
特徴
高可用性(高信頼性)
全てのデータは、自動的に3つのaz(アベイラビリティゾーン)に保存されます。仮に2つのazに同時に障害が発生しても、データが消えることはありません。
引用:【AWS Tech 再演】AWS の NoSQL 入門 〜Amazon ElastiCache, Amazon DynamoDB〜|AWS Summit Tokyo 2017
高いスケーラビリティ
読み込みと書き込みのスループットキャパシティ(処理能力)を自由に決められます。 負荷状況によってオートスケーリングもできるので柔軟なスケーリングが可能です。
引用:【AWS Tech 再演】AWS の NoSQL 入門 〜Amazon ElastiCache, Amazon DynamoDB〜|AWS Summit Tokyo 2017
オンデマンド(キャパシティを瞬時に拡張、縮小)もできたので、波の激しいリクエストへのスケーリングも可能になりました。下記のように、波があっても柔軟にスケーリングできます。
引用:Amazon DynamoDB オンデマンドキャパシティーモードを使用して、急増するワークロードを実行し、コストを 90% 以上最適化する
高速、かつ一貫したパフォーマンス
RDSはデータ量が増えてくるとどうしても探索量が増えて性能劣化が起きてきますが、DynamoDBは一定のデータ量でテーブルを分割(=パーティショニング)していて、データが増えても探索量が増えないので、データ量が増えても性能劣化しにくいです。
ただ、この仕組みゆえ、複雑なクエリは苦手です。複数のパーティションに検索に行かないといけないようなクエリは探索量が増えるため、パフォーマンスも悪く、キャパシティも消費します。
フルマネージド
前述の通り、インフラ、スケーラビリティ、可用性、バックアップ。何も考えなくても使えます。
引用 : 20180410 AWS White Belt Online Seminar AWSのよくある都市伝説とその真実
結果整合性
DynamoDBは基本的には結果整合性です。一時的に不完全なデータが存在する可能性があります。最終的には整合性が保たれます。※後述のRead Consistency(強い一貫性を持った参照)をつければ一貫性を保つこともできます。
柔軟性
テーブル内でアトリビュート(RDBでのカラム)が違ったり不足していたりと、不揃いでも問題ありません!
何に向いているか?
上記に挙げた特徴に噛み合うシステムに向いています。
- 高い信頼性と拡張性を必要とするシステム
- スループットが増減するようなピーク帯のあるシステム
- 大量のデータを蓄積して高速な検索が可能なシステム
- 広告やゲームなどのユーザー行動履歴を管理するシステム
- webアプリケーションの永続的なセッションデータベース
- ユーザー情報を格納するデータベース
- ソーシャルゲームアプリのバックエンド
などなど…。
その他便利機能
イベント指向のプログラミング(DynamoDB Streams)
直近24時間の追加、変更、削除の変更履歴を保持する機能です。dynamoDBの変更をトリガーに非同期にlambdaをキックすることができます。処理の集計、分析、通知に使えます。便利!
引用:Amazon DynamoDB ストリームを使用して、順序付けされたデータをアプリケーション間でレプリケーションする方法
~やってみた記事~
期限切れデータの自動メンテナンス(Time-To-Live:TTL)
有効期限を設定することで、一定時間経過後に自動で削除することができます。DynamoDBはその特性上、古いデータを削除するのが自力では少しめんどくさいです…。なのでとても便利!
~やってみた記事~
強い一貫性を持った参照(Read Consistency)
前述のとおり、DynamoDBは基本的に結果整合性です。 一時的に不完全なデータが存在する可能性があります。
ですが、Read Consistency(強い一貫性を持った参照)オプションを付けることで、一貫性を保てます!キャパシティを通常以上に消耗したり、グローバルセカンダリインデックスはサポート外だったりと、そもそもパフォーマンスが落ちるので、多様は推奨されません…。
~やってみた記事~
データキャッシュ(DynamoDB Accelerator:DAX)
ただでさえ早いDynamoDBですが、同じデータに何度もアクセスする場合、このDAXを使うとさらに高速でデータ参照が可能です。下記やってみた記事を見ると分かりますが、10倍速~50倍速に!?
引用:【新機能】インメモリ型キャッシュクラスタで超高速化!Amazon DynamoDB Accelerator (DAX) のプレビュー版で速さを体験してみた
~やってみた記事~
料金体系
読み込み/書き込みにかかる料金+データストレージにかかる料金+オプション料金になります。オプションについては割愛します。 詳細は公式ページを参照ください。
読み込み/書き込み
プロビジョニングされたキャパシティー
読み込み/書き込みキャパシティーユニット(処理能力)の使用個数×時間単位に課金されます。 無期限無料の無料利用枠があります。
オンデマンドキャパシティー
読み込み/書き込みリクエスト単位に課金されます。 無料利用枠の対象外です。プロビジョニングされたキャパシティーよりも割高になります。
ストレージ利用料
GB 月単位で課金されます。 無期限無料の無料利用枠があります。
最後に
入門ということで、使い方より特徴的な部分をまとめてみました。1年前のDynamoDBを知らなかった頃の自分に向けて書いてみました!入門って難しい…おかげでやってみたを書く余裕はありませんでした…。先輩方のやってみたをリンクしたので、各リンク先をご覧くださいませ。
DynamoDBは、高可用性、スケーラビリティが必要な大規模アプリに使用するのはもちろんなのですが、ちょっとした小さいアプリを作る際にも重宝します。プロビジョニングされたキャパシティーなら無期限無料の無料利用枠の範囲でも使えます!私もよく簡単なアプリを作る際に使用します。個人的にCloudWatchの次によく使ってるサービスかも…。本当に安いので簡単な個人開発アプリの強い味方!!
RDBしか使ったことがない方も、この機会にぜひ一度使って見て頂けたら嬉しいです!
以上、『AWS 再入門ブログリレー 2020』の 18日目のエントリ『Amazon DynamoDB』編でした。 明日 (8/28) は鈴木 純さんの「AWS CloudFormation」の予定です。お楽しみに!!
参考
【AWS Tech 再演】AWS の NoSQL 入門 〜Amazon ElastiCache, Amazon DynamoDB〜|AWS Summit Tokyo 2017